package com.hsgene.user.service;

import com.hsgene.user.condition.GeneticTestingUserAddressCondition;
import com.hsgene.user.condition.GroundServantInfoCondition;
import com.hsgene.user.domain.GeneticTestingUserAddress;
import com.hsgene.user.dto.address.AddressDetails;
import com.hsgene.user.dto.address.GeneticTestingUserAddressDetails;
import com.hsgene.user.dto.address.GeneticTestingUserAddressDto;
import com.hsgene.user.dto.user.groundservant.GroundServantInfoDto;

import java.util.List;
import java.util.Map;

/**
 * @description:
 * @projectName: hdas-geneshop-server
 * @package: com.hsgene.user.service
 * @author: maodi
 * @createDate: 2018/11/8 9:08
 * @version: 1.0
 * Copyright: Copyright (c) 2018
 */
public interface GeneticTestingUserAddressService {

    /**
     * @param territoryName 大区名字
     * @return int
     * @description 查询大区名称在字典表的数量
     * @author maodi
     * @createDate 2018/11/8 17:08
     */
    int queryCountSysDictByTerritoryName(String territoryName);

    /**
     * @param name 省，市，区县名称
     * @return int
     * @description 查询省，市，区县名称在地区表中的数量
     * @author maodi
     * @createDate 2018/11/8 17:09
     */
    int queryCountSysAreaByName(String name);

    /**
     * @param areaId 地区id
     * @return int
     * @description 获取地区id在地区表中的数量
     * @author maodi
     * @createDate 2018/11/8 17:19
     */
    int queryCountSysAreaByAreaId(String areaId);

    /**
     * @param id 地区表的主键id
     * @return java.lang.String
     * @description 根据id获取地区表中名称
     * @author maodi
     * @createDate 2018/12/24 9:27
     */
    String queryNameByAreaId(String id);

    /**
     * @param
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @description 获取地服下拉框数据源
     * @author maodi
     * @createDate 2018/11/8 16:02
     */
    List<Map<String, Object>> selectGroundServant();


    /**
     * @param userId 用户id
     * @return GeneticTestingUserAddressDetails
     * @description 根据用户id获取地服基本信息
     * @author maodi
     * @createDate 2018/11/8 18:16
     */
    GeneticTestingUserAddressDetails queryGroundServantBaseInfo(String userId);

    /**
     * @param userId
     * @return java.util.List<com.hsgene.user.dto.address.AddressDetails>
     * @description 根据用户id地服收货地址详情
     * @author maodi
     * @createDate 2018/11/8 18:17
     */
    List<AddressDetails> queryAddressDetails(String userId);

    /**
     * @param condition 查询条件
     * @return int
     * @description 地服收货地址条件查询数量
     * @author maodi
     * @createDate 2018/11/8 18:18
     */
    int queryGroundServantCountByCondition(GeneticTestingUserAddressCondition condition);

    /**
     * @param condition 查询条件
     * @return java.util.List<com.hsgene.user.dto.address.GeneticTestingUserAddressDto>
     * @description 地服收货地址条件查询
     * @author maodi
     * @createDate 2018/11/9 9:16
     */
    List<GeneticTestingUserAddressDto> queryGroundServantByCondition(GeneticTestingUserAddressCondition condition);

    /**
     * @param id 逻辑主键
     * @return java.util.List<com.hsgene.user.domain.GeneticTestingUserAddress>
     * @description 地服收货地址根据id查询
     * @author maodi
     * @createDate 2018/11/9 9:17
     */
    List<GeneticTestingUserAddress> queryGroundServantById(String id);

    /**
     * @param userId 用户id
     * @return java.util.List<com.hsgene.user.domain.GeneticTestingUserAddress>
     * @description 地服收货地址根据用户id查询
     * @author maodi
     * @createDate 2018/11/9 9:18
     */
    List<GeneticTestingUserAddress> queryGroundServantByUserId(String userId);

    /**
     * @param list   地服收货地址列表
     * @param userId 用户id
     * @return void
     * @description 地服收货地址新增
     * @author maodi
     * @createDate 2018/11/12 15:37
     */
    void insertGroundServant(List<GeneticTestingUserAddress> list, String userId);

    /**
     * @param id 逻辑主键id
     * @return int
     * @description 设置此id的地服收货地址为默认
     * @author maodi
     * @createDate 2018/11/9 9:23
     */
    int setDefaultAddress(String id);

    /**
     * @param id 逻辑主键id
     * @return int
     * @description 设置此id的地服收货地址为非默认
     * @author maodi
     * @createDate 2018/11/12 16:12
     */
    int setNotDefaultAddress(String id);

    /**
     * @param id     逻辑主键id
     * @param userId 用户id
     * @return int
     * @description 设置除当前id外此用户id的其他地服收货地址为非默认
     * @author maodi
     * @createDate 2018/11/9 9:23
     */
    int setOtherNotDefaultAddress(String id, String userId);

    /**
     * @param id
     * @param userId
     * @return int
     * @description 设置此id的地服收货地址为默认，除此id外此用户id的其他地服收货地址为非默认
     * @author maodi
     * @createDate 2018/11/9 13:37
     */
    int setCurrentDefaultAndSetOtherNotDefault(String id, String userId);

    /**
     * @param list   地服收货地址链表
     * @param userId 用户id
     * @return void
     * @description 地服收货地址修改
     * @author maodi
     * @createDate 2018/11/12 15:42
     */
    void updateGroundServant(List<GeneticTestingUserAddress> list, String userId);

    /**
     * @param geneticTestingUserAddress 地服收货地址
     * @return int
     * @description 地服收货地址删除
     * @author maodi
     * @createDate 2018/11/9 9:25
     */
    int deleteGroundServant(GeneticTestingUserAddress geneticTestingUserAddress);

    /**
     * @param userIds 用户id数组
     * @return int
     * @description 地服收货地址根据用户id批量删除
     * @author maodi
     * @createDate 2018/11/9 9:27
     */
    int deleteGroundServantMulti(String[] userIds);

    /**
     * @param userIds 用户id数组
     * @return int
     * @description 根据用户id数组查询数量
     * @author maodi
     * @createDate 2018/11/9 16:50
     */
    int queryCountByUserIds(String[] userIds);

    /**
     * @param userId 用户id
     * @return java.util.List<java.lang.String>
     * @description 查询用户id所有的主键id
     * @author maodi
     * @createDate 2018/11/9 17:01
     */
    List<String> queryIdsByUserId(String userId);

    /**
     * @param name 真实姓名
     * @return int
     * @description 根据地服真实姓名查找用户表中数量
     * @author maodi
     * @createDate 2018/11/12 10:17
     */
    int queryGeneticTestingUserCountByRealName(String name);

    /**
     * @param userId 用户id
     * @param name   用户真实姓名
     * @return int
     * @description 根据用户id和用户真实姓名查询用户表中数量
     * @author maodi
     * @createDate 2018/11/12 10:28
     */
    int queryGeneticTestingUserCountByUserIdAndRealName(String userId, String name);


    /**
     * @param userId 用户id
     * @return int
     * @description 根据用户id查找地服收货地址默认数量
     * @author maodi
     * @createDate 2018/11/12 11:15
     */
    int queryIsDefaultCountByUserId(String userId);

    /**
     * @param condition 查询条件
     * @return java.util.List<com.hsgene.user.dto.user.groundservant.GroundServantInfoDto>
     * @description 根据查询条件获取地服列表信息
     * @author maodi
     * @createDate 2018/11/21 11:32
     */
    List<GroundServantInfoDto> queryGroundServantInfoByCondition(GroundServantInfoCondition condition);

    /**
     * @param condition 查询条件
     * @return int
     * @description 根据查询条件查询地服数量
     * @author maodi
     * @createDate 2018/11/21 11:45
     */
    int queryGroundServantInfoCountByCondition(GroundServantInfoCondition condition);

}
